package test0ne.设计模式;

import test0ne.Node;

import java.util.Stack;

/**
 * 解析形如A(B(C(,),),E(,))  的字符串，在内存中构建一棵二叉树
 *
 *
 *
 * 1. 是形如上面的字符串，你的程序需要能解析所有类似的字符串，而不是只限于上面这一个
 *
 * 2. 逗号分隔为左右两个节点，节点可能为空
 *
 * 3. 字符是节点里的值，括号里的是左右节点，为了简化节点值只会是一个字符
 */
public class Test {
    static Node parse(String input) {
        if(input == null || input =="" ) {return  null;}

        Node node = new Node(input.charAt(0));

        Stack<Character> stack = new Stack<>();
        String sub = input.substring(2, input.length()-1);
        int index = -1;
        for (int i = 0; i < sub.length(); i++) {
            if(sub.charAt(i) == '(' ) {
                stack.push(sub.charAt(i));
                continue;
            }
            if(sub.charAt(i) ==')') {
                if(stack.size()>0) {
                    stack.pop();
                    if(stack.size() == 0) {
                        index = i+1;
                        break;
                    }
                }
            }
        }
        if(index == -1) {
            node.setLeft( input.charAt(2)==','? null: new Node(input.charAt(2)));
            node.setRight(input.charAt(input.length()-2) == ','? null: new Node(input.charAt(2)));
        }else {
            String leftStr = input.substring(2,2+index);
            String rightStr  = input.substring(2+index+1, input.length()-1);
            node.setLeft(parse(leftStr));
            node.setRight(parse(rightStr));
        }

        return node;
    }

    static String toString(Node node){
        if(node == null) return "";
        return node.getValue()+"("+toString(node.getLeft())+","+toString(node.getRight())+")";
    }

    public static void main(String[] args) {
//        String input = "A(B(C(,),),E(,))";
//        Node node = parse(input);
//        toString(node);

        String test = "";
        System.out.println(test == null);
        System.out.println(test.length() == 0);
    }

}
